package com.iter.devbox.java8;

import java.time.Clock;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Month;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class Test {

	public static void main(String[] args) {
		Converter<String, Integer> converter = (from) -> Integer.valueOf(from);  
		Integer converted = converter.convert("123");  
		System.out.println(converted);//123
		
		//1================
		new Runnable(){
			public void run() {
				System.out.println("run..........");
			}
		}.run();
		
		
		//2================
		Runnable r = () -> {
			System.out.println("Lambda......1");
			System.out.println("Lambda......2");
			int a = 1;
			System.out.println(a);
		};
		r.run();
		
		List<User> list = createUserList();
		Stream<User> stream = list.stream();
		stream.forEach(p->System.out.println(p.getName()));
		
		Stream<User> stream2 = list.stream();
		stream2.filter(p->p.getAge()==20).forEach(p->System.out.println(p.getName()));
		
		//Java 的日期与时间 API 问题由来已久，Java 8 之前的版本中关于时间、日期及其他时间日期格式化类由于线程安全、重量级、序列化成本高等问题而饱受批评。Java 8 吸收了 Joda-Time 的精华，以一个新的开始为 Java 创建优秀的 API。新的 java.time 中包含了所有关于时钟（Clock），本地日期（LocalDate）、本地时间（LocalTime）、本地日期时间（LocalDateTime）、时区（ZonedDateTime）和持续时间（Duration）的类。历史悠久的 Date 类新增了 toInstant() 方法，用于把 Date 转换成新的表示形式。这些新增的本地化时间日期 API 大大简化了了日期时间和本地化的管理。
		//LocalDate
		LocalDate localDate = LocalDate.now(); //获取本地日期
		localDate = LocalDate.ofYearDay(2014, 200); // 获得 2014 年的第 200 天 
		System.out.println(localDate.toString());//输出：2014-07-19
		localDate = LocalDate.of(2014, Month.SEPTEMBER, 10); //2014 年 9 月 10 日 
		System.out.println(localDate.toString());//输出：2014-09-10
		
		//LocalTime
		LocalTime localTime = LocalTime.now(); //获取当前时间
		System.out.println(localTime.toString());//输出当前时间
		localTime = LocalTime.of(10, 20, 50);//获得 10:20:50 的时间点
		System.out.println(localTime.toString());//输出: 10:20:50
		
		//Clock 时钟
		Clock clock = Clock.systemDefaultZone();//获取系统默认时区 (当前瞬时时间 )
		long millis = clock.millis();//
		System.out.println(millis);
	}
	
	public static List<User> createUserList () {
		List<User> list = new ArrayList<>();
		User u1 = new User(20, "zhangsan");
		User u2 = new User(23, "lisi");
		User u3 = new User(20, "wanger");
		list.add(u1);
		list.add(u2);
		list.add(u3);
		return list;
	}
}

class User {
	private int age;
	
	private String name;
	
	public User (int age, String name) {
		this.age = age;
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}
